#include "util.hpp"
#include "config.hpp"
#include "data.hpp"
#include "hot.hpp"
#include "service.hpp"
#include <thread>
// void test(const char* name){
//    tqbcloud::Fileutil f(name);
//    std::cout<<"SIZE:"<<f.FileSize()<<std::endl;
//    std::cout<<"astacctime:"<<f.Lastacctime()<<std::endl;
//    std::cout<<"Lastmotime:"<<f.Lastmotime()<<std::endl;
//    std::string body;
//    //f.GetPosLen(&body,5,5);
//    f.GetContent(&body);
//    std::cout<<"body:"<<body<<std::endl;
//    std::cout<<"filename:"<<f.FileName()<<std::endl;
//    std::string body2="nnnd";
//    f.SetContent(&body2);
//    f.Compress("demo.txt.zip");



//    tqbcloud::Fileutil f(name);
//    f.UnCompress("demo.txt1");

//    tqbcloud::Fileutil f(name);
//    f.CreateDirectory();
//    std::vector<std::string> v;
//    f.ScanDirectory(&v);
//    for(auto vv:v){
//      std::cout<<vv<<std::endl;
//    }
// }
// void testjson(){
//    Json::Value v;
//    v["姓名"]="小明";
//    v["性别"]="男";
//    v["年龄"]=18;
//    v["成绩"]["高一"].append(99);
//   //  v["成绩"]["高一"].append(99);
//   //  v["成绩"]["高一"].append(99);
//    v["成绩"]["高二"].append(99);
//    v["成绩"]["高二"].append(99);
//    v["成绩"]["高二"].append(99);
//    v["成绩"]["高三"].append(99);
//    v["成绩"]["高三"].append(99);
//    v["成绩"]["高三"].append(99);
//    std::string s;
//    tqbcloud::JsonUtil::Serialize(v,&s);
//    std::cout<<s<<std::endl;

//    Json::Value v1;
//    tqbcloud::JsonUtil::UnSerialize(s,&v1);
//    std::cout<<v1["年龄"].asInt()<<std::endl;


// }
tqbcloud::DataManager _Data("./hot.bat");
void testconfig()
{
   tqbcloud::Config* c=tqbcloud::Config::getinstance();
   std::cout<<c->Gethottime()<<" "<<c->GetManagerFile()<<" "<<c->GetServerIp()<<" "<<c->GetArcSuffix()<<" "<<c->GetBackDir()<<" "<<c->GetPackDir()<<" "<<c->GetServerPort()<<" "<<c->GetURLPrefix()<<" "<<std::endl;
}
void testbackup(){
    // tqbcloud::BackupInfo b;
    // b.NewBackupInfo("./bundle.h");

    // tqbcloud::BackupInfo c;
    // c.NewBackupInfo("./bundle.cpp");

    // tqbcloud::BackupInfo d;
    // d.NewBackupInfo("./demo.txt");

    tqbcloud::BackupInfo e;
    e.NewBackupInfo("./demo.txt.zip");

    // //std::cout<<b._atime<<" "<<b._fsize<<" "<<b._mtime<<" "<<b._pack_flag<<" "<<b._packpath<<" "<<b._realpath<<" "<<b._url<<std::endl;


    tqbcloud::DataManager m("backup.txt");
    // m.Insert(b._url,b);
    // m.Insert(c._url,c);
    // m.Insert(d._url,d);
    m.Insert(e._url,e);

    // std::cout<<m._table[b._url]._atime<<" "<<m._table[b._url]._fsize<<" "<<m._table[b._url]._mtime<<" "<<m._table[b._url]._pack_flag<<" "<<m._table[b._url]._packpath<<" "<<m._table[b._url]._realpath<<" "<<m._table[b._url]._url<<std::endl;
    // std::cout<<m._table[c._url]._atime<<" "<<m._table[c._url]._fsize<<" "<<m._table[c._url]._mtime<<" "<<m._table[c._url]._pack_flag<<" "<<m._table[c._url]._packpath<<" "<<m._table[c._url]._realpath<<" "<<m._table[c._url]._url<<std::endl;
    // std::cout<<m._table[d._url]._atime<<" "<<m._table[d._url]._fsize<<" "<<m._table[d._url]._mtime<<" "<<m._table[d._url]._pack_flag<<" "<<m._table[d._url]._packpath<<" "<<m._table[d._url]._realpath<<" "<<m._table[d._url]._url<<std::endl;
    //tqbcloud::BackupInfo tmp;
    // m.GetOneByURL(d._url,&tmp);
    // m.GetOneByRealPath(c._realpath,&tmp);
    // std::cout<<tmp._atime<<" "<<tmp._fsize<<" "<<tmp._mtime<<" "<<tmp._pack_flag<<" "<<tmp._packpath<<" "<<tmp._realpath<<" "<<tmp._url<<std::endl;

    std::vector<tqbcloud::BackupInfo> arry;
    m.GetAll(&arry);
    for(auto tmp:arry){
        std::cout<<tmp._atime<<" "<<tmp._fsize<<" "<<tmp._mtime<<" "<<tmp._pack_flag<<" "<<tmp._packpath<<" "<<tmp._realpath<<" "<<tmp._url<<std::endl;
    }

}
void testbackup_(){
    

    tqbcloud::BackupInfo d;
    d.NewBackupInfo("./demo.txt");
    tqbcloud::DataManager m("backup.txt");
    m.Insert(d._url,d);

    std::vector<tqbcloud::BackupInfo> arry;
    m.GetAll(&arry);
    for(auto tmp:arry){
        std::cout<<tmp._atime<<" "<<tmp._fsize<<" "<<tmp._mtime<<" "<<tmp._pack_flag<<" "<<tmp._packpath<<" "<<tmp._realpath<<" "<<tmp._url<<std::endl;
    }

}
void testhottime(){
    tqbcloud::HotManager hot;
    hot.RunModule();

}
void test(){
    tqbcloud::Fileutil fu("./paap/");
    fu.CreateDirectory();
}
void testserver(){
    tqbcloud::Service s;
    s.RunModule();
}
int main(int argc,char *argv[])
{
    //test(argv[1]);
    //testjson();
    //testconfig();
    //testbackup();
    //testbackup_();

    //testhottime();
    //test();

    std::thread testhottime_thread(testhottime);//热点管理
    std::thread testserver_thread(testserver);//业务处理
    testhottime_thread.join();
    testserver_thread.join();
    return 0;
}